<template>
	<view class="container">
		<view class="form-box">
			<text class="title">注册</text>
			<view class="input-group">
				<input type="text" placeholder="请输入用户名" v-model="username" />
			</view>
			<view class="input-group">
				<input type="text" placeholder="名称" v-model="realname" />
			</view>
			<view class="input-group">
				<input type="password" placeholder="请输入密码" v-model="password" />
			</view>
			<view class="input-group">
				<input type="password" placeholder="请确认密码" v-model="confirmPassword" />
			</view>

			<view class="input-group">
				<input type="text" placeholder="请输入电话号码" v-model="telephone" />
			</view>
			<view class="input-group">
				<input type="text" placeholder="请输入邮箱" v-model="email" />
			</view>
			<button class="btn" @click="register">注册</button>
			<navigator url="/pages/Login/Login" class="link">已有账号？去登录</navigator>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				// 补全所有绑定的变量
				username: '', // 用户名
				realname: '', // 名称
				password: '', // 密码
				confirmPassword: '', // 确认密码
				telephone: '', // 电话号码
				email: '' // 邮箱
			}
		},
		methods: {
			// 表单验证方法
			validateForm() {
				// 1. 用户名验证
				if (!this.username.trim()) {
					uni.showToast({
						title: '请输入用户名',
						icon: 'none'
					});
					return false;
				}
				// 2. 名称验证
				if (!this.realname.trim()) {
					uni.showToast({
						title: '请输入名称',
						icon: 'none'
					});
					return false;
				}
				// 3. 电话号码验证（11位手机号正则）
				const phoneReg = /^1[3-9]\d{9}$/;
				if (!this.telephone.trim()) {
					uni.showToast({
						title: '请输入电话号码',
						icon: 'none'
					});
					return false;
				} else if (!phoneReg.test(this.telephone)) {
					uni.showToast({
						title: '请输入正确的11位手机号',
						icon: 'none'
					});
					return false;
				}
				// 4. 邮箱验证
				const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
				if (!this.email.trim()) {
					uni.showToast({
						title: '请输入邮箱',
						icon: 'none'
					});
					return false;
				} else if (!emailReg.test(this.email)) {
					uni.showToast({
						title: '请输入正确的邮箱格式',
						icon: 'none'
					});
					return false;
				}
				// 5. 密码验证
				if (!this.password.trim()) {
					uni.showToast({
						title: '请输入密码',
						icon: 'none'
					});
					return false;
				} else if (this.password.length < 6) {
					uni.showToast({
						title: '密码长度不能少于6位',
						icon: 'none'
					});
					return false;
				}
				// 6. 确认密码验证
				if (this.password !== this.confirmPassword) {
					uni.showToast({
						title: '两次密码不一致',
						icon: 'none'
					});
					return false;
				}
				return true;
			},

			// 注册核心方法
			register() {
				// 先执行表单验证，验证失败则终止
				if (!this.validateForm()) return;

				// 显示加载提示，防止重复点击
				uni.showLoading({
					title: '注册中...'
				});

				// 调用云函数注册
				uniCloud.callFunction({
					name: 'userAdd',
					data: {
						// 传递所有表单字段，参数名与前端变量对应
						username: this.username,
						realname: this.realname,
						password: this.password,
						telephone: this.telephone,
						email: this.email
					},
					success: (res) => {
						console.log('注册成功回调：', res);
						// 隐藏加载提示
						uni.hideLoading();
						// 显示成功提示
						uni.showToast({
							title: '注册成功',
							icon: 'success'
						});
						// 延迟1秒跳转到登录页
						setTimeout(() => {
							uni.redirectTo({
								url: '/pages/Login/Login'
							});
						}, 1000);
					},
					fail: (err) => {
						console.error('注册失败：', err);
						// 隐藏加载提示
						uni.hideLoading();
						// 显示失败提示
						uni.showToast({
							title: '注册失败，请重试',
							icon: 'none'
						});
					}
				})
			}
		}
	}
</script>

<style>
	.container {
		display: flex;
		justify-content: center;
		align-items: center;
		min-height: 100vh;
		background-color: #f5f5f5;
	}

	.form-box {
		width: 80%;
		max-width: 400px;
		background-color: #fff;
		padding: 20px;
		border-radius: 8px;
		box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
	}

	.title {
		display: block;
		text-align: center;
		font-size: 20px;
		font-weight: bold;
		margin-bottom: 20px;
	}

	.input-group {
		margin-bottom: 15px;
	}

	.input-group input {
		width: 100%;
		padding: 10px;
		border: 1px solid #ddd;
		border-radius: 4px;
	}

	.btn {
		width: 100%;
		padding: 10px;
		background-color: #007aff;
		color: #fff;
		border: none;
		border-radius: 4px;
		margin-bottom: 10px;
	}

	.link {
		display: block;
		text-align: center;
		color: #007aff;
		font-size: 14px;
	}
</style>